#include "toolgroup.h"
#include<QSpinBox>
#include<QSlider>
#include<QLayout>
#include<QDebug>

ToolGroup::ToolGroup(QString title,double _mn,double _mx,double _step,double _deft,double decimal,QWidget *parent)
    :QGroupBox(title,parent),mn(_mn),mx(_mx),step(_step),deft(_deft)
{
    // 微调框
    pSpinBox = new QDoubleSpinBox(this);
    pSpinBox->setMinimum(mn);  // 最小值
    pSpinBox->setMaximum(mx);  // 最大值
    pSpinBox->setSingleStep(_step);  // 步长
    pSpinBox->setDecimals(decimal);

    // 滑动条
    pSlider = new QSlider(this);
    pSlider->setOrientation(Qt::Horizontal);  // 水平方向
    pSlider->setMinimum(0);  // 最小值e
    pSlider->setMaximum((mx-mn)/step);  // 最大值
    pSlider->setSingleStep(1);  // 步长

    // 连接信号槽（相互改变）
    connect(pSpinBox,&QDoubleSpinBox::valueChanged,this,&ToolGroup::slotChangeSlider);
    connect(pSlider,&QSlider::valueChanged,this, &ToolGroup::slotChangeSpinBox);

    pSpinBox->setValue(_deft);

    QHBoxLayout *hLayout = new QHBoxLayout;
    hLayout->addWidget(pSlider);
    hLayout->addWidget(pSpinBox);
    setLayout(hLayout);
}

void ToolGroup::slotChangeSlider(double x){
    double xx=x-mn;
    xx/=step;
    pSlider->setValue(qRound(xx));
}

void ToolGroup::slotChangeSpinBox(int x){
    double xx=x*step;
    xx+=mn;
    pSpinBox->setValue(xx);
    emit valueChanged();
}

double ToolGroup::getNum(){
    return pSpinBox->value();
}
